home *** CD-ROM | disk | FTP | other *** search
- /*** LISTING 4 ***/
- /*** ***/
- /*** intin.c ***/
- /*** **************************************** ***/
- /*** INTERRUPT TO HANDLE DATA RECEIVED ***/
- /*** **************************************** ***/
- #include "serial.h"
-
- extern int portbase;
-
- static char buf[SBUFSIZ];
- static int bufptr = 0;
- static int byteptr = 0;
-
- extern void (interrupt far *oldvect)();
-
- void interrupt far ReceiveData(void)
- {
-
- if((inp(portbase + IIR) & RX_MASK) == RX_ID)
- {
- buf[bufptr++] = inp(portbase + RXR);
-
- if(bufptr >= SBUFSIZ)
- bufptr = 0;
- }
-
- /*** Signal end of hardware interrupt ***/
-
- outp(ICR,EOI);
-
- (*oldvect)();
- }
-
- /*** **************************************** ***/
- /*** GRABS A BYTE FROM BUFFER ***/
- /*** **************************************** ***/
- int IntSerialIn(void)
- {
- int Char_Value;
-
- if (byteptr == bufptr)
- {
- return (-1);
- }
-
- Char_Value = (int)buf[byteptr++];
-
- if(byteptr >= SBUFSIZ)
- byteptr = 0;
-
- return (Char_Value);
- }